Some Common Problems and their Solutions

problems permission denied

Our attempt with this manual has been to prevent you from having difficulties. Experience shows that certain common progblems recur, however. In this section we hope to address some of these problems.

``Permission Denied.''
p4 slave processes are started by forks (for slaves in the same shared-memory cluster), by the server, or by the remote shell command. If the server is running on the target machine then that must be configured to allow remote processes to be started. To test whether this is your problem, try
\begin{example}
rsh target.machine date
\end{example}
If you still get the ``Permission denied.'' message, then the problem has nothing to do with p4. See hosts.equiv or .rhosts in the system man pages.
``More processes than message queues''
Under the default configuration of p4, uniprocessors, such as most workstations, cannot have multiple process sharing memory. Thus your procgroup file for a workstation network should always look like
\begin{example}
local 0
machine1 1 pathname
machine2 1 pathname
machine3 1 pathname
.
.
\end{example}
The ``local'' means ``only the master on the startup machine; no local slaves sharing memory''.

IPC It is possible, at some cost in message-passing efficiency, to have a cluster of processes sharing memory on a workstation, but in this case p4 must have been installed with the SYSV_IPC option set in the OPTIONS file. The cost is that a process waiting for a message must spin between checking for a message arriving on a socket and a message arriving through shared memory.

``p4_error: local is not first entry in procgroup''
the first line of the procgroup file must be the ``local'' entry, specifying the number of slaves that will be run on the master machine in addition to the master process.

``gethostbyname failed 100 times''
Check for an invalid machine name in the procgroup file.
``pgm_path_name: Command not found''
P4 tried to start the program with the given name on a remote machine and the program did not exist. Verify the full path name of the program.
program hangs
You may have failed to initialize the type and from fields before a p4_recv. You might have used p4_sendr between two processes at the same time, which will deadlock if you think about it, or even if you don't. Use p4_send instead.
program hangs or has bad data in received message
You might have failed to set the pointer to the incoming buffer to NULL, or to have specifically allocated a buffer with p4_msg_alloc, before a p4_recv.
program ignores command-line arguments
You might have passed argc instead of &argc to p4_initenv.
program runs out of memory
You may need to call p4_msg_free after each p4_recv, or reuse buffers by pre-allocating them.

Concept Index,Function Index,Some Common Problems and their Solutions,Top